/**
* @author yangyu.liu 
* @time    2022-12-2-20
* @description   网络封装
*/
// 首先引入axios
import axios from 'axios'
// 引入Pinia仓库
import { commonDefinition } from '../store'
// 创建axios通用配置
const Axios = axios.create({
    // 基准路径
    baseURL: '/kaiyang',
    // 请求超时
    timeout: 5000,

})
// 请求拦截/如果用户token不存在那么请求就不能发出
// 判断是否需要拦截，定义一个不需要拦截的地址
// 这两个请求路径不需要拦截,后续根据不同业务，如果不需要拦截，请求地址就放这里
let noInterceptorUrls = [
    '/user/validate/code',
    '/user/app/login'
]
// 固定的网络请求的写法
Axios.interceptors.request.use(function (config) {
    if (noInterceptorUrls.includes(config.url)) {
        return config
    }
    // 获取token，判断token是否存在，如果不存在，那么请求就要终止，返回一个promise.reject
    let token = commonDefinition().getToken
    if (!!token) {
        config.headers.token = token
        return config
    }
    //   失败返回失败结果原因
    return Promise.reject({ code: 1, message: '用户token丢失' })
})
// export default Axios
export default function Ajax(req) {
    if (!req || !req.url) throw new TypeError('请求对象为传递或url参数没有传递')
    return new Promise(resolve => {
        Axios.request({
            // 请求地址，不论何时何种请求都必须有
            url: req.url,
            // 方法，可以是任何方法，但是默认是post请求
            method: req.method || "POST",
            // 请求参数，有些会有请求参数，有些不需要传所以为空
            data: req.data || {},
            // 如上
            params: req.params || {}
            // 成功结果
        }).then(({ data }) => {
            resolve(data)
            // 失败结果
        }).catch(e => {
            resolve(e)
        })
    })

}